package sample.delegate.test02;

/**
 * <p>动态代理</p>
 * 举一个比较俗的例子，一个男孩boy喜欢上了一个女孩girl，
 * 男孩一直想认识女孩，直接去和女孩打招呼吧，又觉得不好意思。
 * 于是男孩想出了一个办法，委托女孩的室友Proxy去帮他搞定
 * 这件事（获得一些关于女孩的信息）。
 * 
 * Proxy模式是不是和Adapter模式差不多，都是调用一个已有对象的方法来完成功能。
 * 但是他们之间还是有区别的，那就是Proxy模式的目标类必须要实现某个接口，
 * 代理类没有必要实现该接口，模式是死的，它的实现是活的，如果一味的相信某些书上的实现，
 * 学习模式也就失去了意义。有的书上称这种实现为静态代理，之所以这样是为了区别于Proxy模式
 * 在jdk中的另一种实现,jdk中的实现称为动态代理。
 */
public class Main{

	/**
	 * 
	 * @param args void
	 */
	public static void main(String[] args){
		GirlProxy girlProxy = new GirlProxy();
		GirlInfo girl = (GirlInfo)girlProxy.bind(new Girl());
		if (girl.hasBoyFriend()) {
			System.out.println("呵呵，还没有男朋友");
		}else{
			System.out.println("有男朋友了，又怎样？");
		}
	}

}
